const { defineConfig } = require('@vue/cli-service')
const Mock = require('mockjs')
const bodyParser = require('body-parser')
const md5 = require('blueimp-md5')
const { list } = Mock.mock({
  'list|40': [
    {
      'id|+1': 1,
      'image': '@image(200X200,@color)',
      'title': '@ctitle(1,30)',
      'price|1-100.1-2': 1
    }
  ]
})
const { products } = Mock.mock({
  'products|50': [{
    'id|+1': 1,
    'classify': '@pick(["手机数码","礼品鲜花","男装女装","食品"])',
    "title": '@ctitle(3,5)',
    'image': '@image(100X100,@color)'
  }]
})
const users = [
  { username: '张三', password: '123456' }
]
let code = ''
module.exports = defineConfig({
  transpileDependencies: true,
  // 开发者服务器
  devServer: {
    setupMiddlewares: (mid, dev) => {
      dev.app.use(bodyParser.json()) // 转json格式
      //定义接口
      // dev.app.get('/api/list', (req, res) => {
      //   // req是前端传过来的参数 ，res是需要返回给前端的数据
      //   res.send({
      //     code: 200,
      //     data: list,
      //     total: list.length
      //   })
      // })
      // 定义列表接口-分页
      dev.app.get('/api/list', (req, res) => {
        const { pagination, pageNum } = req.query // 页码：1  条数：10
        res.send({
          code: 200,
          // 1 10 :    0  1  2  3   4  5  6  7  8  9
          data: list.slice((pagination - 1) * pageNum, pagination * pageNum), // (起始位置，结束位置+1)
          total: list.length
        })
      })
      // 详情接口
      dev.app.get('/api/detail', (req, res) => {
        const { id } = req.query
        res.send({
          code: 200,
          data: list.find(item => item.id == id) // 只能有两个结果，要么找到，要么找不到  找到就返回这个元素，找不到就返回undefined
        })
      })
      // 搜索接口
      dev.app.get('/api/search', (req, res) => {
        const { value } = req.query
        res.send({
          code: 200,
          // includes: 判断是否包含某个元素
          // filter: 过滤出符合条件的所有元素组成的新数组
          data: list.filter(item => item.title.includes(value))
        })
      })
      // 分类接口
      dev.app.get('/api/kind', (req, res) => {
        const { key } = req.query
        res.send({
          code: 200,
          data: products.filter(item => item.classify == key)
        })
      })
      // 注册接口
      dev.app.post('/api/register', (req, res) => {
        const { username, password } = req.body
        // 先有一个数组，把注册的账号密码存进去
        // 先要判断前端传过来的账号是否已经在该数组中， 在数组中说明账号已注册， 不在数组中说明可以注册
        // 判断数组中的元素里的username是否跟传过来的一样
        // every(): 用于判断数组中所有元素是否满足条件，所有元素都满足才返回true,只要有一个元素不满足就返回false
        const isAdd = users.every(item => item.username != username)
        if (isAdd) {
          // 说明该账号未注册,
          // 先存到users数组中
          users.push({
            username, // username:username
            password // password:password
          })
          res.send({
            code: 200,
            message: '注册成功'
          })
        } else {
          // 说明该账号已经注册
          res.send({
            code: 0,
            message: '该账号已注册'
          })
        }
      })
      // 登录接口
      dev.app.post('/api/login', (req, res) => {
        const { username, password, sms } = req.body
        // 判断前端传过来的用户名密码是否都在users这个数组中，且用户名密码都对，说明账号密码正确，让登录。 其他情况报错
        const user = users.find(item => item.username == username && md5(item.password) == password)
        if (user) {
          // 说明账号密码正确
          // 判断验证码
          if (code == sms) {
            res.send({
              code: 200,
              message: '登录成功',
              token: Mock.Random.guid() // 随机生成一个token
            })
          } else {
            res.send({
              code: 0,
              message: '验证码错误'
            })
          }
        } else {
          // 说明账号密码错误
          res.send({
            code: 0,
            message: '账号或密码错误'
          })
        }
      })
      // 获取随机6位数字验证码接口
      dev.app.get('/api/code', (req, res) => {
        code = Mock.Random.integer(100000, 999999)
        res.send({
          code: 200,
          data: code
        })
      })
      return mid
    }
  }
})
